#pragma once

#include <assert.h>

#include <intrin.h>

#define MEM_GT(x,v) \
	((unsigned int)(x) > (unsigned int)(v))
#define MEM_LT(x,v) \
	((unsigned int)(x) < (unsigned int)(v))

namespace EngineLib {

	class MemoryStack;

	class MemoryPool;

	class MemoryManagement;

	class Data128 {
	public:
		union {
			struct {
				float f0, f1, f2, f3;
			};
			struct {
				double d0, d1;
			};
			struct {
				int i0, i1, i2, i3;
			};
			struct {
				unsigned int ui0, ui1, ui2, ui3;
			};
			struct {
				short s0, s1, s2, s3;
				short s4, s5, s6, s7;
			};
			struct {
				unsigned short us0, us1, us2, us3;
				unsigned short us4, us5, us6, us7;
			};
			struct {
				char c0, c1, c2, c3;
				char c4, c5, c6, c7;
				char c8, c9, c10, c11;
				char c12, c13, c14, c15;
			};
			struct {
				unsigned char uc0, uc1, uc2, uc3;
				unsigned char uc4, uc5, uc6, uc7;
				unsigned char uc8, uc9, uc10, uc11;
				unsigned char uc12, uc13, uc14, uc15;
			};
			struct {
				__m128 simd;
			};
		};
	};
}